home *** CD-ROM | disk | FTP | other *** search
- 10 ' SSLOG.BAS version 1.3 - Copyrigh⌠ (C⌐ 1986,198╖ b∙ Clarkσ Greenσ K1J╪ NO╘ FO╥ COMMERCIA╠ USE
- 20 '
- 30 ' This Microsoft (tm) BASIC program will build a complete log package for the ARRL Sweepstakes Contest.
- 40 '
- 50 ' The file containing the log entries must be an ASCII file in the following format:
- 60 ' (each mode requires a separate log entry file)
- 70 '
- 80 ' <*BAND> <+TIME ON -TIME OFF> <TIME> RCV'D NR RCV'D PREC RCV'D CALLSIGN RCV'D CHECK RCV'D SEC.
- 90 ' (each log entry must be followed by a carriage return)
- 100 '
- 110 ' At least one space must be between each field of each log entry.
- 120 '
- 130 ' Any time a band change is made, the first field in the log entry should be an asterisk, followed by the band.
- 140 '
- 150 ' for example: *14 would indicate a band change to 14 MHz.
- 160 '
- 170 ' To indicate on and off times, enter the time of going on or off, preceded immediately by a plus <+> to
- 180 ' indicate ON or a minus <-> to indicate OFF. (MUST be 4 digits)
- 190 '
- 200 ' for example: +0134 would indicate an on time of 0134
- 210 '
- 220 '
- 230 ' Only a changed digit in the time field must be present; for example, if the contest begins at 1800Z and the
- 240 ' first contact is made at 1802Z and the second contact is made at 1805Z, then only 5 need be entered in the
- 250 ' time field. If the third contact is made at 1812Z, then 12 should be entered in the time field. If the next
- 260 ' contact is made at 1812Z, then no number need be entered in the time field (however, be sure to enter a space
- 270 ' to indicate separation between fields).
- 280 '
- 290 '
- 300 ' A short set of log entries might be:
- 310 '
- 320 ' *14 +0100 0104 434 B WB1AVA 78 CT
- 330 ' 5 2 A K1JX 68 CT
- 340 ' *21 9 99 A WA1NEV 73 CT
- 350 ' 765 B W3ZZ 52 MDC
- 360 ' -0123 14 948 B W1VD 70 CT
- 370 '
- 380 ' This log extract shows an operating period beginning at 0100 on the 14 MHz band.
- 390 ' A band change to 21 MHz was made at 0109, and the period ended at 0123.
- 400 '
- 410 ' These files will be produced:
- 420 ' <filename>.LOG - this is a complete log ready for printing
- 430 ' <filename>.DUP - this is a sorted duplicate listing ready for printing
- 440 ' <filename>.SUM - this is a summary sheet ready for printing
- 450 '
- 460 '
- 470 ' Depending on the version of BASIC for your particular machine, the CLS (Clear Screen) command must
- 480 ' be changed. Consult your own computer's BASIC documentation for more information.
- 490 '
- 500 '
- 510 ' If compiling (a VERY good idea for several orders of magnitude improvement in speed), use O and E switches
- 520 '
- 530 '
- 540 '
- 550 WARNING$="Copyrigh⌠ (C⌐ 1986,198╖ b∙ Clarkσ Greenσ K1J╪ NO╘ FO╥ COMMERCIA╠ USE"
- 560 '
- 570 ' Define arrays and variables
- 580 DEFINT A-Z : OPTION BASE 1
- 590 DIM ENTRY$(2000), MULT$(75), Q(75)
- 600 MULT$(1)="CT" : MULT$(2)="EMA" : MULT$(3)="ME" : MULT$(4)="NH" : MULT$(5)="RI" : MULT$(6)="VT" : MULT$(7)="WMA"
- 610 MULT$(8)="ENY" : MULT$(9)="NLI" : MULT$(10)="NNJ" : MULT$(11)="SNJ" : MULT$(12)="WNY"
- 620 MULT$(13)="DE" : MULT$(14)="EPA" : MULT$(15)="MDC" : MULT$(16)="WPA"
- 630 MULT$(17)="AL" : MULT$(18)="GA" : MULT$(19)="KY" : MULT$(20)="NC" : MULT$(21)="NFL" : MULT$(22)="SC" : MULT$(23)="SFL"
- 640 MULT$(24)="TN" : MULT$(25)="VA" : MULT$(26)="WIN"
- 650 MULT$(27)="AR" : MULT$(28)="LA" : MULT$(29)="MS" : MULT$(30)="NM" : MULT$(31)="NTX" : MULT$(32)="OK" : MULT$(33)="STX"
- 660 MULT$(34)="WTX"
- 670 MULT$(35)="EB" : MULT$(36)="LAX" : MULT$(37)="ORG" : MULT$(38)="SB" : MULT$(39)="SCV" : MULT$(40)="SDG"
- 680 MULT$(41)="SF" : MULT$(42)="SJV" : MULT$(43)="SV" : MULT$(44)="PAC"
- 690 MULT$(45)="AZ" : MULT$(46)="ID" : MULT$(47)="MT" : MULT$(48)="NV" : MULT$(49)="OR" : MULT$(50)="UT" : MULT$(51)="WA"
- 700 MULT$(52)="WY" : MULT$(53)="AK"
- 710 MULT$(54)="MI" : MULT$(55)="OH" : MULT$(56)="WV"
- 720 MULT$(57)="IL" : MULT$(58)="IN" : MULT$(59)="WI"
- 730 MULT$(60)="CO" : MULT$(61)="IA" : MULT$(62)="KS" : MULT$(63)="MN" : MULT$(64)="MO" : MULT$(65)="NE"
- 740 MULT$(66)="ND" : MULT$(67)="SD"
- 750 MULT$(68)="MAR" : MULT$(69)="PQ" : MULT$(70)="ON" : MULT$(71)="MB" : MULT$(72)="SK" : MULT$(73)="AB"
- 760 MULT$(74)="BC" : MULT$(75)="NWT"
- 770 BANDCHG$= "*" : BLANK$=" " : BL$="" : CLOCKOFF$="-" : CLOCKON$="+" : TRUE=-1
- 780 DUPE$="- Duplicate -" : NEWSECTION$=" Mult. #"
- 790 ' Define format strings for printouts
- 800 LOGFORM$="\ \ \ \ \ \ \ \ #### \ \ \ \ \\ \ \ \ \"
- 810 DUPFORM$=" \ \ \ \ \ \ \ \ \ \"
- 820 SUMFORM$=" \ \ \ \ \ \ \ \ \ \ \ \"
- 830 '
- 840 ' Get information from user
- 850 CLS
- 860 PRINT TAB(23) " Sweepstakes Contest Log Processor " : PRINT : PRINT
- 870 PRINT : PRINT TAB(5) "What is the station callsign? ";
- 880 INPUT "", MYCALL$
- 890 PRINT : PRINT TAB(5) "What is your precedence (A or B)? ";
- 900 INPUT "", MYPREC$
- 910 IF MYPREC$<>"A" AND MYPREC$<>"B" THEN PRINT CHR$(7);: GOTO 890
- 920 PRINT : PRINT TAB(5) "What is your check? ";
- 930 INPUT "", MYCHECK$
- 940 IF LEN(MYCHECK$)<>2 THEN PRINT CHR$(7);: GOTO 920
- 950 PRINT : PRINT TAB(5) "What ARRL section is the station in? ";
- 960 INPUT "", MYSECTION$
- 970 SECTION$=MYSECTION$ : GOSUB 3750 : IF NOT INLIST THEN PRINT CHR$(7);: GOTO 950
- 980 PRINT : PRINT TAB(5) "What is the beginning date of the contest? <dd/mm/yr> ";
- 990 INPUT "", STARTDATE$
- 1000 MARK=INSTR(STARTDATE$,"/") : IF MARK=0 THEN MARK=INSTR(STARTDATE$,"-")
- 1010 STARTDAY=VAL(LEFT$(STARTDATE$,MARK-1))
- 1020 STARTDATE$=RIGHT$(STARTDATE$,LEN(STARTDATE$)-MARK)
- 1030 MARK=INSTR(STARTDATE$,"/") : IF MARK=0 THEN MARK=INSTR(STARTDATE$,"-")
- 1040 MON$=" Nov"
- 1050 YR$=RIGHT$(STARTDATE$,LEN(STARTDATE$)-MARK)
- 1060 PRINT : PRINT TAB(5) "What is the GMT starting time for the contest? ";
- 1070 INPUT "", STARTGMT$
- 1080 IF LEN(STARTGMT$)<>4 THEN PRINT CHR$(7);: GOTO 1060
- 1090 PRINT : PRINT TAB(5) "What file is the log extract located in? ";
- 1100 INPUT "", INFILE$
- 1110 GOSUB 3620 ' check to see if file exists
- 1120 IF INSTR(INFILE$,".")<>0 THEN OUTFILE$=LEFT$(INFILE$,INSTR(INFILE$,".")-1) ELSE OUTFILE$=INFILE$
- 1130 '
- 1140 ' Collect log extract from input file and assign data to arrays
- 1150 CLS
- 1160 PRINT : PRINT TAB(5) "Duping and counting... ";
- 1170 '
- 1180 ' Initialize variables
- 1190 RAWTOTAL=0 : QSOS=0 : DUPES=0 : MULTNR=0 : TOTAL.TIME=0
- 1200 DAY=STARTDAY : PREVIOUSGMT$=STARTGMT$ ' (re)set starting time and day
- 1210 ONTIME$=STARTGMT$
- 1220 ON.TIME=VAL(LEFT$(ONTIME$,2))*60+VAL(RIGHT$(ONTIME$,2)) ' set on-time to default value of contest beginning
- 1230 '
- 1240 ' Open input data file and output .LOG file
- 1250 OPEN INFILE$ FOR INPUT AS #1
- 1260 OPEN OUTFILE$+".LOG" FOR OUTPUT AS #2
- 1270 '
- 1280 ' Input data, process, and enter into output file
- 1290 WHILE NOT EOF(1)
- 1300 LINE INPUT #1, THISENTRY$ ' read entire line from disc file
- 1310 WHILE ASC(RIGHT$(THISENTRY$,1))<48 AND LEN(THISENTRY$)>0
- 1320 THISENTRY$=LEFT$(THISENTRY$,LEN(THISENTRY$)-1) ' strip off trailing spaces,etc
- 1330 WEND
- 1340 IF LEN(THISENTRY$)>0 THEN RAWTOTAL=RAWTOTAL+1 ELSE GOTO 2540
- 1350 '
- 1360 ' Look for band change
- 1370 BAND$=BL$
- 1380 MARK=INSTR(THISENTRY$,BANDCHG$) : IF MARK=0 GOTO 1470 ' if there isn't a bandchange, jump ahead
- 1390 MID$(THISENTRY$,MARK,1)=BLANK$ ' blank out *
- 1400 MARK=MARK+1 ' point to next character
- 1410 WHILE ASC(MID$(THISENTRY$,MARK,1))>=46 AND ASC(MID$(THISENTRY$,MARK,1))<=57
- 1420 BAND$=BAND$+MID$(THISENTRY$,MARK,1) ' parse bandchange string
- 1430 MID$(THISENTRY$,MARK,1)=BLANK$
- 1440 MARK=MARK+1
- 1450 WEND
- 1460 '
- 1470 ' Look for on-time indication
- 1480 ONTIME$=BL$ : TIME.NOTE$=BL$
- 1490 MARK=INSTR(THISENTRY$,CLOCKON$) : IF MARK=0 GOTO 1610
- 1500 MID$(THISENTRY$,MARK,1)=BLANK$
- 1510 MARK=MARK+1
- 1520 WHILE ASC(MID$(THISENTRY$,MARK,1))>=46 AND ASC(MID$(THISENTRY$,MARK,1))<=57
- 1530 ONTIME$=ONTIME$+MID$(THISENTRY$,MARK,1) ' parse on-time string
- 1540 MID$(THISENTRY$,MARK,1)=BLANK$
- 1550 MARK=MARK+1
- 1560 WEND
- 1570 ONTIME$=LEFT$(PREVIOUSGMT$,(4-LEN(ONTIME$)))+ONTIME$ ' complete missing time string
- 1580 ON.TIME=VAL(LEFT$(ONTIME$,2))*60+VAL(RIGHT$(ONTIME$,2))
- 1590 TIME.NOTE$="on "+ONTIME$
- 1600 '
- 1610 ' Look for off-time indication
- 1620 OFFTIME$=BL$
- 1630 MARK=INSTR(THISENTRY$,CLOCKOFF$) : IF MARK=0 GOTO 1770
- 1640 MID$(THISENTRY$,MARK,1)=BLANK$
- 1650 MARK=MARK+1
- 1660 WHILE ASC(MID$(THISENTRY$,MARK,1))>=46 AND ASC(MID$(THISENTRY$,MARK,1))<=57
- 1670 OFFTIME$=OFFTIME$+MID$(THISENTRY$,MARK,1) ' parse off-time string
- 1680 MID$(THISENTRY$,MARK,1)=BLANK$
- 1690 MARK=MARK+1
- 1700 WEND
- 1710 OFFTIME$=LEFT$(PREVIOUSGMT$,(4-LEN(OFFTIME$)))+OFFTIME$ ' complete missing time string
- 1720 TIME.NOTE$="off "+OFFTIME$
- 1730 OFF.TIME=VAL(LEFT$(OFFTIME$,2))*60+VAL(RIGHT$(OFFTIME$,2))
- 1740 IF OFF.TIME<ON.TIME THEN OFF.TIME=OFF.TIME+1440
- 1750 TOTAL.TIME=TOTAL.TIME+OFF.TIME-ON.TIME ' calculate cumulative operating time
- 1760 '
- 1770 ' Separate received section from THISENTRY$
- 1780 SECTION$=BL$ ' initialize section field to blank
- 1790 WHILE ASC(RIGHT$(THISENTRY$,1))>=48
- 1800 SECTION$=RIGHT$(THISENTRY$,1)+SECTION$
- 1810 THISENTRY$=LEFT$(THISENTRY$,LEN(THISENTRY$)-1)
- 1820 WEND
- 1830 WHILE ASC(RIGHT$(THISENTRY$,1))<48
- 1840 THISENTRY$=LEFT$(THISENTRY$,LEN(THISENTRY$)-1) ' strip off trailing spaces,etc
- 1850 WEND
- 1860 '
- 1870 ' Separate received check from THISENTRY$
- 1880 CHECK$=BL$ ' initialize check field to blank
- 1890 WHILE ASC(RIGHT$(THISENTRY$,1))>=48
- 1900 CHECK$=RIGHT$(THISENTRY$,1)+CHECK$
- 1910 THISENTRY$=LEFT$(THISENTRY$,LEN(THISENTRY$)-1)
- 1920 WEND
- 1930 WHILE ASC(RIGHT$(THISENTRY$,1))<48
- 1940 THISENTRY$=LEFT$(THISENTRY$,LEN(THISENTRY$)-1) ' strip off trailing spaces,etc
- 1950 WEND
- 1960 '
- 1970 ' Separate callsign from THISENTRY$
- 1980 CALLSIGN$=BL$ ' initialize callsign field to blank
- 1990 WHILE ASC(RIGHT$(THISENTRY$,1))>=47
- 2000 CALLSIGN$=RIGHT$(THISENTRY$,1)+CALLSIGN$
- 2010 THISENTRY$=LEFT$(THISENTRY$,LEN(THISENTRY$)-1)
- 2020 WEND
- 2030 WHILE ASC(RIGHT$(THISENTRY$,1))<48
- 2040 THISENTRY$=LEFT$(THISENTRY$,LEN(THISENTRY$)-1) ' strip off trailing spaces,etc
- 2050 WEND
- 2060 '
- 2070 ' Separate received prec from THISENTRY$
- 2080 PREC$=RIGHT$(THISENTRY$,1) ' 1 character prec
- 2090 THISENTRY$=LEFT$(THISENTRY$,LEN(THISENTRY$)-1)
- 2100 WHILE ASC(RIGHT$(THISENTRY$,1))<48
- 2110 THISENTRY$=LEFT$(THISENTRY$,LEN(THISENTRY$)-1) ' strip off trailing spaces,etc
- 2120 WEND
- 2130 '
- 2140 ' Separate received number from THISENTRY$
- 2150 NR$=BL$ ' initialize number field to blank
- 2160 WHILE ASC(RIGHT$(THISENTRY$,1))>=48
- 2170 NR$=RIGHT$(THISENTRY$,1)+NR$
- 2180 THISENTRY$=LEFT$(THISENTRY$,LEN(THISENTRY$)-1)
- 2190 WEND
- 2200 WHILE ASC(RIGHT$(THISENTRY$,1))<48
- 2210 THISENTRY$=LEFT$(THISENTRY$,LEN(THISENTRY$)-1) ' strip off trailing spaces,etc
- 2220 WEND
- 2230 NR$=SPACE$(4-LEN(NR$))+NR$+" "+PREC$ ' concatenate number and prec.
- 2240 '
- 2250 ' Separate GMT from THISENTRY$
- 2260 IF LEN(THISENTRY$)=0 GOTO 2310
- 2270 WHILE ASC(LEFT$(THISENTRY$,1))<48
- 2280 THISENTRY$=RIGHT$(THISENTRY$,LEN(THISENTRY$)-1) ' strip off leading spaces
- 2290 WEND
- 2300 ' Fill in missing time data
- 2310 GMT$=LEFT$(PREVIOUSGMT$,(4-LEN(THISENTRY$)))+THISENTRY$
- 2320 THEDATE$=BL$ : IF GMT$<PREVIOUSGMT$ THEN DAY=DAY+1 : THEDATE$=STR$(DAY)+MON$ : THEDATE$=RIGHT$(THEDATE$,LEN(THEDATE$)-1)
- 2330 '
- 2340 ' Check for dupes
- 2350 DUPE.QSO=NOT TRUE : NOTE$=BL$ ' clear note field
- 2360 FOR I=1 TO QSOS
- 2370 IF CALLSIGN$=ENTRY$(I) THEN NOTE$=DUPE$ : DUPES=DUPES+1 : DUPE.QSO=TRUE : I=QSOS
- 2380 NEXT I
- 2390 IF DUPE.QSO GOTO 2470 ' if contact is a dupe, skip over multiplier search
- 2400 QSOS=QSOS+1 : ENTRY$(QSOS)=CALLSIGN$
- 2410 '
- 2420 ' Check for multipliers
- 2430 GOSUB 3750 : IF NOT INLIST THEN GOSUB 3820
- 2440 Q(INDEX)=Q(INDEX)+1
- 2450 IF Q(INDEX)=1 THEN MULTNR=MULTNR+1 : NOTE$=NEWSECTION$+STR$(MULTNR)
- 2460 '
- 2470 ' Write entry to file
- 2480 IF (RAWTOTAL-1) MOD 50=0 THEN GOSUB 3910 ' print the header if this is the beginning of a page
- 2490 PRINT #2, USING LOGFORM$; BAND$; THEDATE$; TIME.NOTE$; GMT$; RAWTOTAL; NR$; CALLSIGN$; CHECK$; SECTION$; NOTE$
- 2500 IF RAWTOTAL MOD 50=0 THEN PRINT #2, CHR$(12) ' print a form feed if this is the end of the page
- 2510 '
- 2520 ' Update variables for next entry
- 2530 PREVIOUSGMT$=GMT$ : GMT$=BL$
- 2540 WEND
- 2550 IF RAWTOTAL MOD 50 <>0 THEN PRINT #2, CHR$(12) ' if a form feed wasn't printed, print one now
- 2560 CLOSE
- 2570 '
- 2580 ' Calculate total operating time
- 2590 IF OFFTIME$<>BL$ GOTO 2630 ' if an off-time was specified, jump ahead
- 2600 OFF.TIME=VAL(LEFT$(PREVIOUSGMT$,2))*60+VAL(RIGHT$(PREVIOUSGMT$,2))
- 2610 IF OFF.TIME<ON.TIME THEN OFF.TIME=OFF.TIME+1440
- 2620 TOTAL.TIME=TOTAL.TIME+OFF.TIME-ON.TIME ' calculate cumulative operating time
- 2630 TOTAL.HRS$=STR$(TOTAL.TIME\60)
- 2640 TOTAL.MIN$=STR$(TOTAL.TIME MOD 60)
- 2650 TOTAL.MIN$=RIGHT$(TOTAL.MIN$,LEN(TOTAL.MIN$)-1) ' delete leading space
- 2660 WHILE LEN(TOTAL.MIN$)<2
- 2670 TOTAL.MIN$="0"+TOTAL.MIN$ ' append leading zero
- 2680 WEND
- 2690 TOTAL.MIN$=":"+TOTAL.MIN$
- 2700 PRINT "done"
- 2710 '
- 2720 ' Build dupe sheet
- 2730 PRINT : PRINT TAB(5) "Preparing dupe sheet... ";
- 2740 '
- 2750 ' Sort callsigns for dupe sheet
- 2760 M=QSOS\2
- 2770 WHILE M>0
- 2780 FOR I=M+1 TO QSOS
- 2790 J=I-M
- 2800 WHILE J>0
- 2810 IF ENTRY$(J)>ENTRY$(J+M) THEN SWAP ENTRY$(J),ENTRY$(J+M) : J=J-M ELSE J=0
- 2820 WEND
- 2830 NEXT I
- 2840 M=M\2
- 2850 WEND
- 2860 '
- 2870 ' Enter dupe sheet into file
- 2880 OPEN OUTFILE$+".DUP" FOR OUTPUT AS #1
- 2890 IF QSOS MOD 250=0 THEN LASTPAGE=QSOS\250 ELSE LASTPAGE=QSOS\250+1
- 2900 FOR PAGE=1 TO LASTPAGE
- 2910 PRINT #1, SPC(22-(LEN(MYCALL$))/2); MYCALL$; " -- Sweepstakes Dupe Sheet -- Page"; STR$(PAGE)
- 2920 PRINT #1, BL$ : PRINT #1, BL$
- 2930 FOR ROW=1 TO 50
- 2940 E=(PAGE-1)*250+ROW
- 2950 PRINT #1, USING DUPFORM$; ENTRY$(E); ENTRY$(E+50); ENTRY$(E+100); ENTRY$(E+150); ENTRY$(E+200)
- 2960 NEXT ROW
- 2970 PRINT #1, CHR$(12) ' go to next page
- 2980 NEXT PAGE
- 2990 CLOSE
- 3000 PRINT "done"
- 3010 '
- 3020 ' Build summary listing
- 3030 PRINT : PRINT TAB(5) "Preparing summary sheet... ";
- 3040 '
- 3050 ' Append QSO count to section name
- 3060 FOR I=1 TO 75
- 3070 IF Q(I)=0 THEN MULT$(I)=MULT$(I)+SPACE$(4-LEN(MULT$(I)))+"- None" : GOTO 3090
- 3080 MULT$(I)=MULT$(I)+SPACE$(4-LEN(MULT$(I)))+"-"+STR$(Q(I))
- 3090 NEXT I
- 3100 '
- 3110 ' Enter summary sheet into file
- 3120 OPEN OUTFILE$+".SUM" FOR OUTPUT AS #1
- 3130 PRINT #1, SPC(16-(LEN(MYCALL$))/2); MYCALL$; " -- Summary Sheet for "; YR$; " Sweepstakes Contest"
- 3140 PRINT #1, BL$ : PRINT #1, BL$
- 3150 PRINT #1, TAB(15) "Section Listing and number of contacts per Section"
- 3160 PRINT #1, BL$ : PRINT #1, BL$
- 3170 PRINT #1, " 1 2 3 4 5 6"
- 3180 PRINT #1, BL$
- 3190 PRINT #1, USING SUMFORM$; MULT$(1); MULT$(8); MULT$(13); MULT$(17); MULT$(27); MULT$(35)
- 3200 PRINT #1, USING SUMFORM$; MULT$(2); MULT$(9); MULT$(14); MULT$(18); MULT$(28); MULT$(36)
- 3210 PRINT #1, USING SUMFORM$; MULT$(3); MULT$(10); MULT$(15); MULT$(19); MULT$(29); MULT$(37)
- 3220 PRINT #1, USING SUMFORM$; MULT$(4); MULT$(11); MULT$(16); MULT$(20); MULT$(30); MULT$(38)
- 3230 PRINT #1, USING SUMFORM$; MULT$(5); MULT$(12); BL$; MULT$(21); MULT$(31); MULT$(39)
- 3240 PRINT #1, USING SUMFORM$; MULT$(6); BL$; BL$; MULT$(22); MULT$(32); MULT$(40)
- 3250 PRINT #1, USING SUMFORM$; MULT$(7); BL$; BL$; MULT$(23); MULT$(33); MULT$(41)
- 3260 PRINT #1, USING SUMFORM$; BL$; BL$; BL$; MULT$(24); MULT$(34); MULT$(42)
- 3270 PRINT #1, USING SUMFORM$; BL$; BL$; BL$; MULT$(25); BL$; MULT$(43)
- 3280 PRINT #1, USING SUMFORM$; BL$; BL$; BL$; MULT$(26); BL$; MULT$(44)
- 3290 PRINT #1, BL$ : PRINT #1, BL$ : PRINT #1, BL$
- 3300 PRINT #1, " 7 8 9 0 VE"
- 3310 PRINT #1, BL$
- 3320 PRINT #1, USING SUMFORM$; MULT$(44); MULT$(54); MULT$(57); MULT$(60); MULT$(68); BL$
- 3330 PRINT #1, USING SUMFORM$; MULT$(45); MULT$(55); MULT$(58); MULT$(61); MULT$(69); BL$
- 3340 PRINT #1, USING SUMFORM$; MULT$(46); MULT$(56); MULT$(59); MULT$(62); MULT$(70); BL$
- 3350 PRINT #1, USING SUMFORM$; MULT$(47); BL$; BL$; MULT$(63); MULT$(71); BL$
- 3360 PRINT #1, USING SUMFORM$; MULT$(48); BL$; BL$; MULT$(64); MULT$(72); BL$
- 3370 PRINT #1, USING SUMFORM$; MULT$(49); BL$; BL$; MULT$(65); MULT$(73); BL$
- 3380 PRINT #1, USING SUMFORM$; MULT$(50); BL$; BL$; MULT$(66); MULT$(74); BL$
- 3390 PRINT #1, USING SUMFORM$; MULT$(51); BL$; BL$; MULT$(67); MULT$(75); BL$
- 3400 PRINT #1, USING SUMFORM$; MULT$(52); BL$; BL$; BL$; BL$; BL$
- 3410 PRINT #1, USING SUMFORM$; MULT$(53); BL$; BL$; BL$; BL$; BL$
- 3420 PRINT #1, BL$ : PRINT #1, BL$ : PRINT #1, BL$
- 3430 PRINT #1, TAB(18); "Total Valid QSOs - "; STR$(QSOS); TAB(45); "Dupes - "; STR$(DUPES)
- 3440 PRINT #1, TAB(18); "Sections - "; STR$(MULTNR)
- 3450 PRINT #1, TAB(18); "Total operating time - "; TOTAL.HRS$; TOTAL.MIN$
- 3460 PRINT #1, CHR$(12)
- 3470 CLOSE
- 3480 PRINT "done"
- 3490 '
- 3500 ' Print results
- 3510 CLS : PRINT CHR$(7)
- 3520 PRINT : PRINT TAB(8) "Results" : PRINT TAB(8) "-------"
- 3530 PRINT : PRINT TAB(8) "Valid QSOs: "; QSOS
- 3540 PRINT : PRINT TAB(8) "Duplicate QSOs: "; DUPES
- 3550 PRINT : PRINT TAB(8) "Sections: "; MULTNR
- 3560 PRINT : PRINT TAB(8) "Total operating time: "; TOTAL.HRS$; TOTAL.MIN$
- 3570 PRINT : PRINT : PRINT
- 3580 PRINT TAB(29) "Press any key to Exit ";
- 3590 ANS$=INPUT$(1)
- 3600 CLS : SYSTEM
- 3610 '
- 3620 ' Subroutine to trap missing file
- 3630 ON ERROR GOTO 3690
- 3640 OPEN INFILE$ FOR INPUT AS #1 ' try opening file
- 3650 ON ERROR GOTO 0
- 3660 CLOSE
- 3670 RETURN
- 3680 '
- 3690 ' Error trap for missing file
- 3700 PRINT CHR$(7) : PRINT TAB(4) "That file does not exist - type X to Exit or any other key to continue ";
- 3710 ANS$=INPUT$(1) : IF ANS$="X" OR ANS$="x" THEN CLS : SYSTEM
- 3720 PRINT
- 3730 RESUME 1090
- 3740 '
- 3750 ' Subroutine to search multiplier list
- 3760 INLIST=NOT TRUE
- 3770 FOR I=1 TO 75
- 3780 IF SECTION$=MULT$(I) THEN INDEX=I : INLIST=TRUE : I=75
- 3790 NEXT I
- 3800 RETURN
- 3810 '
- 3820 ' Subroutine to clear up impossible section
- 3830 PRINT CHR$(7) : PRINT
- 3840 PRINT TAB(5) "The section for "; CALLSIGN$; " ["; SECTION$; "] must be incorrect."
- 3850 PRINT : PRINT TAB(8) "What is the correct section? ";
- 3860 INPUT "", SECTION$
- 3870 GOSUB 3750 : IF NOT INLIST GOTO 3830
- 3880 PRINT : PRINT TAB(5) "Back to duping and counting... ";
- 3890 RETURN
- 3900 '
- 3910 ' Subroutine to print log sheet header
- 3920 PRINT #2, MYCALL$; " Sweepstakes Log"; TAB(73); "Page"; STR$(RAWTOTAL\50+1)
- 3930 PRINT #2, TAB(27) "Sent: :--- "; MYPREC$; " "; MYCALL$; " "; MYCHECK$; " "; MYSECTION$
- 3940 PRINT #2, TAB(34) "V"
- 3950 PRINT #2, "Band Date On/Off Time Nr Nr Pr Call Ck Sec Notes"
- 3960 PRINT #2, STRING$(80,61)
- 3970 THEDATE$=STR$(DAY)+MON$ : THEDATE$=RIGHT$(THEDATE$,LEN(THEDATE$)-1)
- 3980 RETURN